package com.codemonkey.lq.common.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public final class ArrayHelper {

    /**
     * 《编写高质量代码 改善Java程序的151条建议》 - 建议42: 让工具类不可实例化.(不仅设置成private访问权限, 还抛出异常.)
     */
    private ArrayHelper() {
        throw new Error("Can not instantize ! ! !");
    }

    /**
     * 给数组扩容
     * 
     * @param <T>
     * @param datas :
     *            现有数据
     * @param newLen :
     *            新数组的大小
     * @return 新数组
     */
    public static <T> T[] expandCapacity(T[] datas, int newLen) {
        // 不能是负值
        newLen = newLen < 0 ? 0 : newLen;
        // 生成一个新数组,并拷贝原值
        return Arrays.copyOf(datas, newLen);
    }

    /**
     * Arrays的asList生成的List长度是不可改变.所以有了这个方法.................. ..................
     * 把一个变长参数转变为列表,并且长度可变
     */
    public static <T> List<T> asList(T... t) {
        List<T> list = new ArrayList<T>();
        Collections.addAll(list, t);
        return list;
    }

}
